package com.fare.taluo.application.impl.crawl.crawlstatistics;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.springframework.context.annotation.Scope;

import com.fare.taluo.util.DateUtils;
import com.fare.taluo.vo.core.StatisticsTotalDetailEntityVO;
@Scope("prototype")
public class CrawlStatisticsVOFilter {
	@SuppressWarnings("unchecked")
	public static List singleLineCrawlStatistics(Map<String,StatisticsTotalDetailEntityVO> map){
		Object s[] = map.keySet().toArray();
		for(int i = 0; i < map.size(); i++) {
			StatisticsTotalDetailEntityVO stu=map.get(s[i]);
		}
		List voList = new ArrayList();
		Iterator iter = map.entrySet().iterator();  //获得map的Iterator
		while(iter.hasNext()) {
			Entry entry = (Entry)iter.next();
			voList.add(entry.getValue());
		}
		return voList;
	}
	/*//重组VO
	 * frequency 一天抓取的次数
	 */	
	@SuppressWarnings({ "unused", "unchecked" })
	public static List<StatisticsTotalDetailEntityVO> restructure(List<StatisticsTotalDetailEntityVO> voList ,int frequency ){
		Map<String,StatisticsTotalDetailEntityVO> map=new HashMap<String,StatisticsTotalDetailEntityVO>();
		for(int i=0;i<voList.size();i++){
			StatisticsTotalDetailEntityVO old=voList.get(i);
			String key=mins(old.getStartTimeStr(),frequency)+"--"+flag(old.getEndTimeStr());
			if(map.get(key) !=null){
				int k=1;
				k++;
				StatisticsTotalDetailEntityVO newVo=map.get(key);
				
				Date startTimes=minDate(old.getStartTime(), newVo.getStartTime());
				Date endTimes=minDate(old.getEndTime(), newVo.getEndTime());
				
				newVo.setStartTime(startTimes);
				newVo.setStartTimeStr(startTimes!=null?com.fare.taluo.util.DateUtils.dateToStr(startTimes,"yyyy-MM-dd HH:mm:ss"):null);
				newVo.setEndTime(endTimes);
				newVo.setEndTimeStr(endTimes !=null?com.fare.taluo.util.DateUtils.dateToStr(endTimes, "yyyy-MM-dd HH:mm:ss"):null);
				
				map.put(key, newVo);
			}else{
				map.put(key, old);
			}
		}
		Object s[] = map.keySet().toArray();
		List reVOlist = new ArrayList();
		Iterator iter = map.entrySet().iterator();  //获得map的Iterator
		while(iter.hasNext()) {
			Entry entry = (Entry)iter.next();
			reVOlist.add(entry.getValue());
		}
		
		return reVOlist;
	}
	
	public static int flag(String dateT){
		int key=0;
		if(!"".equals(dateT)  && dateT !=null){
			key=1;
		}
		return key;
	}
	
	/*
	 * 过滤抓取日期
	 * flag=1：当日数据（今天抓取的数据）
	 * flag=2：历史数据（今天之前的抓取）
	 */
	@SuppressWarnings("rawtypes")
	public static List filterVo(List<StatisticsTotalDetailEntityVO> list,String filterDateStr ,int flag){
		Map<String,StatisticsTotalDetailEntityVO> map=new LinkedHashMap<String,StatisticsTotalDetailEntityVO>();
		String nowadayStr=DateUtils.getDateStr("YYYY-MM-dd");
		for(int i=0;i<list.size();i++){
			StatisticsTotalDetailEntityVO old =list.get(i);
			String key=old.getGrabdate();//拼装成一个key
			if (key != null) {
				if (map.get(key) != null) {// 判断已经存在同个日期，同个渠道，成功数相同，实际抓取数相同，同一出发城市，同一到到达城市
											// 的数据
					int k = 1;
					k++;
					StatisticsTotalDetailEntityVO newVo = map.get(key);// 将存在的数据取出来

					map.put(key, newVo);
				} else {
					map.put(key, old);
				}
			}
		}
		
		if(map.size()>1 && map !=null){
			if(flag==1){
				for(Map.Entry<String, StatisticsTotalDetailEntityVO> rmMap:map.entrySet()){
					if(!rmMap.getKey().equals(nowadayStr)){
						map.remove(rmMap.getKey());
					}
				}
			}if(flag==2){
				map.remove(nowadayStr);
			}
		}
		
		Object s[] = map.keySet().toArray();
		List voList = new ArrayList();
		Iterator iter = map.entrySet().iterator();  //获得map的Iterator
		while(iter.hasNext()) {
			Entry entry = (Entry)iter.next();
			voList.add(entry.getValue());
		}
		
		return voList;
	}
	
	/*
	 * 把DateStr HH:mm
	 * 转为：XX min
	 */	
	public static int mins(String dateStr ,int frequency){
		int minsInt=0;
		String []dateS=dateStr.split("\\:");
		int minsInt1=Integer.parseInt(dateS[0].split(" ")[1])*60;
		int minsInt2=Integer.parseInt(dateS[1]);
		minsInt=minsInt1+minsInt2;
		
		int frequencyInt=minsInt/frequency;
		return frequencyInt;
	}
	
	//total
	private Long countadd(Long a,Long b){
		if(a!=null&&b!=null)
			return a+b;
		if(a==null & b==null)//这里用& 和  && 小心点
		    return 0l;
		if(a==null & b!=null)
			return b;
		if(b==null & a!=null)
			return a;
		return 0l;
	}
	//判断类型为空，赋值0
	private static Long nullToLong(Long a,Long b){
		if(a!=null&&b!=null)
			return a+b;
		if(a==null & b==null)//这里用& 和  && 小心点
		    return 0l;
		if(a==null & b!=null)
			return b;
		if(b==null & a!=null)
			return a;
		return 0l;
	}
	
	//平均时间
	private Long avgTime(Long a,Long b){
		if(a!=null&&b!=null)
			return (a+b)/2;
		if(a==null & b==null)//这里用& 和  && 小心点
		    return 0l;
		if(a==null & b!=null)
			return b/2;
		if(b==null & a!=null)
			return a/2;
		return 0l;
	}
	
	//比较出两最大日期
	public static String maxDate(String date1,String date2){
		SimpleDateFormat fmt = new SimpleDateFormat ("yyyy-MM-dd"); 
		String reStr=null;
		try {
			if (date1 != null && !date1.equals("") && date2 != null
					&& !date2.equals("")) {
				if (fmt.parse(date1).after(fmt.parse(date2))) {
					reStr = date1.split("\\ ")[0];
				}else{
					reStr = date2.split("\\ ")[0];
				}
			}
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return reStr;
	}
	//比较出两较小日期
		public static String minDate(String date1,String date2){
			SimpleDateFormat fmt = new SimpleDateFormat ("yyyy-MM-dd"); 
			String reStr=null;
			try {
				if (date1 != null && !date1.equals("") && date2 != null
						&& !date2.equals("")) {
					if (fmt.parse(date1).after(fmt.parse(date2))) {
						reStr = date2.split("\\ ")[0];
					}else{
						reStr = date1.split("\\ ")[0];
					}
				}
			} catch (ParseException e) {
				e.printStackTrace();
			}
			return reStr;
		}
	
	 //比较出小日期
	public static Date minDate(Date date1,Date date2){
		Date minDates=null;
		if(date1 !=null && date2 !=null){
			if(date1.after(date2)){
				minDates=date2;
			}else{
				minDates=date1;
			}
		}
		if(date1==null){
			minDates=date2;
		}
		if(date2==null){
			minDates=date1;
		}
		
		return minDates;
	}
	
	//比较出较大日期
	public static Date maxDate(Date date1,Date date2){
		Date maxDates=null;
		if(date1 !=null && date2 !=null){
			if(date1.after(date2)){
				maxDates=date1;
			}else{
				maxDates=date2;
			}
		}
		return maxDates;
	}
	
	
}
